package com.edu.app.model.wechat;

import com.edu.app.util.json.JsonUtil;

import lombok.Builder;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.io.IOException;
import java.io.Serializable;

/**
 * 微信错误码.
 * 请阅读：
 * 公众平台：<a href="http://mp.weixin.qq.com/wiki/10/6380dc743053a91c544ffd2b7c959166.html">全局返回码说明</a>
 * 企业微信：<a href="https://work.weixin.qq.com/api/doc#10649">全局错误码</a>
 *
 * @author Daniel Qian & Binary Wang
 */
@Data
@Builder
public class WxError implements Serializable {
  private static final long serialVersionUID = 7869786563361406291L;

  /**
   * 微信错误代码.
   */
  private int errcode;

  /**
   * 微信错误信息.
   * （如果可以翻译为中文，就为中文）
   */
  private String errmsg;

  /**
   * 微信接口返回的错误原始信息（英文）.
   */
  private String errorMsgEn;

  private String json;

  public WxError() {
  }

  public WxError(int errcode, String errmsg, String errorMsgEn, String json) {
    this.errcode = errcode;
    this.errmsg = errmsg;
    this.errorMsgEn = errorMsgEn;
    this.json = json;
  }

  public static WxError fromJson(String json) {
    return fromJson(json, null);
  }

  public static WxError fromJson(String json, WxType type) {
    WxError wxError = null;
    try {
      wxError = (WxError) JsonUtil.fromJson(json, WxError.class);
      if (StringUtils.isNotEmpty(wxError.getErrmsg())) {
        wxError.setErrorMsgEn(wxError.getErrmsg());
      }

    }
    catch(IOException ioe)
    {
      wxError = new WxError(1,ioe.getMessage(),null,json);
    }
    return wxError;
  }

  @Override
  public String toString() {
    if (this.json != null) {
      return this.json;
    }
    return "错误: Code=" + this.errcode + ", Msg=" + this.errmsg;
  }

}
